package cliente.controle;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JLabel;
import javax.swing.table.DefaultTableModel;

import cliente.modelo.Conta;
import cliente.modelo.Extrato;

public class ExtratoControlador {

	// Ações para controlar Views

	public static void carregaTabelaValues(int contaId,
			DefaultTableModel tableModel, JLabel saldoLabel) {
		ArrayList<Extrato> extratos = new ArrayList<Extrato>();
		tableModel.getDataVector().clear();
		try {
			extratos = ExtratoControlador.getExtratoDaConta(contaId);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (extratos != null) {
			// tableModel.setDataVector(dataVector, columnIdentifiers)

			for (Extrato extrato : extratos) {
				Vector<String> rowData = new Vector<String>();
				rowData.add(extrato.getData());
				rowData.add(extrato.getOperacao());
				rowData.add(extrato.getMovimentacao());
				tableModel.addRow(rowData);
			}

		} else {
			Vector<String> rowData = new Vector<String>();
			rowData.add("");
			rowData.add("");
			rowData.add("");
			tableModel.addRow(rowData);
		}
		// Mostra saldo
		String saldo;
		Conta conta = null;
		try {
			conta = ContaControlador.get(contaId);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		saldo = String.format("Seu saldo é de: "
				+ ContaControlador.getSaldo(conta));
		saldoLabel.setText(saldo);
	}

	// Métodos para VerClientesView

	private static Extrato getExtrato(Sistema sistema, int id)
			throws IOException {
		String movimentacao = sistema.getLineServidor();
		String operacao = sistema.getLineServidor();
		String data = sistema.getLineServidor();
		int contaId = Integer.parseInt(sistema.getLineServidor());

		return new Extrato(id, movimentacao, operacao, data, contaId);
	}

	public static ArrayList<Extrato> getExtratoDaConta(int contaId)
			throws IOException {
		Sistema sistema = Sistema.getUnicaInstancia();
		sistema.escreveServidor("ExtratoControlador");
		sistema.escreveServidor("getExtratoDaConta");
		sistema.escreveServidor(contaId);

		String param;
		ArrayList<Extrato> extratos = new ArrayList<Extrato>();
		while (!(param = sistema.getLineServidor()).equalsIgnoreCase("END")) {
			if (!(param.equalsIgnoreCase("null"))) {
				int id = Integer.parseInt(param);
				extratos.add(getExtrato(sistema, id));
			} else
				return null;
		}
		return extratos;

	}
}
